import { NestFactory,HttpAdapterHost } from '@nestjs/core';
import { VersioningType,VERSION_NEUTRAL  } from '@nestjs/common';
import { AppModule } from './app.module';
import { ConfigService } from '@nestjs/config';
import { WINSTON_MODULE_NEST_PROVIDER } from 'nest-winston';
import {AllExceptionFilter} from './common/filter/all-exception/all-exception.filter'
async function bootstrap() {
  const app = await NestFactory.create(AppModule);
  // 获取配置文件
  const configService = app.get(ConfigService);
   // 读取配置文件PORT变量，如果没有设置，默认3000
   const port = configService.get<number>('PORT') ?? 3000;
    const cors = configService.get<string>('CORS')
    // api前缀
    const prefix = configService.get<string>('PREFIX', '/api')
     // 读取配置文件VERSION变量，如果没有设置，默认1.0.0
    const versionStr = configService.get<string>('VERSION', '1.0.0')
    let version = [versionStr]
    if(versionStr.indexOf(',') ){
      version = versionStr.split(',')
    }

  // 读取配置文件ERROR_FILTER变量，如果没有设置，默认false
   const errorFilter = configService.get<string>('ERROR_FILTER')


  // 添加日志 中间件 
  //  app.useLogger() 方法将 NestJS 默认的日志系统（通常是 console 日志）替换为 Winston 日志系统
  app.useLogger(app.get(WINSTON_MODULE_NEST_PROVIDER));

  // setGlobalPrefix 设置全局前缀
  app.setGlobalPrefix(prefix );
  // 设置版本号
  app.enableVersioning({
    type: VersioningType.URI,
    defaultVersion: typeof versionStr === 'undefined' ? VERSION_NEUTRAL : version,
  })

   if(cors === 'true'){
    app.enableCors();
   }

   if(errorFilter === 'true'){
    // 全局过滤器 只有实例一个
   const httpAdapter = app.get(HttpAdapterHost)
    app.useGlobalFilters(new AllExceptionFilter(httpAdapter))
   }
   
 
  console.log(configService.get('PORT'), 'configService');
  await app.listen(port);
}
bootstrap();
